	package de.bht.fb6.mobisand.avoidlist.model;

import java.util.Date;

/**
 * Modellklasse für eine einzelne "ToAvoid"
 * 
 * @author Bruno Kirschner, Mario Dörwald
 * @since 20. November 2012
 */
public class ToAvoid {
	
	/////////////////// Attribute ////////////////////////////////////////////////////

	/** ID des ToAvoid **/
	private long id;
	
	/** Name des ToAvoid **/
	private String name;

	/** Beschreibung des ToAvoid **/
	private String description;

	/** Wurde das ToAvoid erledigt? **/
	private boolean avoided;

	/** Wie wichtig ist die ToAvoid? **/
	private int importance;

	/** Bis wann sollte es vermieden werden **/
	private Date avoidanceDate;

	///////////////////// Konstruktoren //////////////////////////////////////////////
	
	/**
	 * Standardkonstruktor für ein leeres ToAvoid.
	 */
	public ToAvoid () {
		super();
		
		this.id = 0;
		this.name = "";
		this.description = "";
		this.avoided = false;
		this.importance = 0;
		this.avoidanceDate = new Date();
	}
	
	public ToAvoid(int id) {
		this();
		this.id = id;
	}
	
	//////////////////// Getter / Setter /////////////////////////////////////////////

	/**
	 * Gibt die ID des ToAvoid zurück.
	 * 
	 * @return
	 * 	die ID
	 */
	public long getId() {
		return id;
	}

	/**
	 * Setzt eine neue ID für das ToAvoid
	 * 
	 * @param id
	 * 	die neue ID
	 */
	public void setId(final long id) {
		this.id = id;
	}
	
	/**
	 * Gibt den Namen des ToAvoid zurück.
	 * 
	 * @return
	 * 	Name der ToAvoid
	 */
	public String getName() {
		return name;
	}

	/**
	 * Setzt einen neuen Namen für die ToAvoid.
	 * 
	 * @param name
	 * 	Neuer Name für die ToAvoid
	 */
	public void setName(final String name) {
		this.name = name;
	}

	/**
	 * Gibt die Beschreibung des ToAvoid zurück.
	 * 
	 * @return
	 * 	Beschreibung des ToAvoid
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * Ändert die Beschreibung des ToAvoid.
	 * 
	 * @param description
	 * 	Neue ToAvoid Beschreibung
	 */
	public void setDescription(final String description) {
		this.description = description;
	}

	/**
	 * Gibt an ob das ToAvoid erledigt wurde.
	 * 
	 * @return
	 * 	true wenn das ToAvoid erledigt wurde
	 *  sonst false
	 */
	public boolean isAvoided() {
		return avoided;
	}

	/**
	 * Legt fest ob das ToAvoid erfolgreich vermieden wurde.
	 * 
	 * @param avoided
	 * 	boolean das festlegt ob das ToAvid erledigt wurde
	 */
	public void setAvoided(final boolean avoided) {
		this.avoided = avoided;
	}

	/**
	 * Gibt an wie wichtig die ToAvoid ist.
	 * 
	 * @return
	 * 	Wichtigkeits-Level der ToAvoid
	 */
	public int getImportance() {
		return this.importance;
	}

	/**
	 * Legt fest wie wichtig die ToAvoid ist.
	 * 
	 * @param importance
	 * 	der neue Wichtigkeits-Level der ToAvoid
	 */
	public void setImportance(final int importance) {
		this.importance = importance;
	}

	/**
	 * Gibt an bis wann das ToAvoid vermieden werden sollte.
	 * 
	 * @return
	 * 	Datum bis wann das ToAvoid aktuell ist
	 */
	public Date getAvoidanceDate() {
		return avoidanceDate;
	}

	/**
	 * Setzt ein neues Datum bis wann das ToAvoid vermieden werden sollte.
	 * 
	 * @param avoidanceDate
	 * 	Neues Datum bis wann das ToAvoid aktuell ist
	 */
	public void setAvoidanceDate(final Date avoidanceDate) {
		this.avoidanceDate = avoidanceDate;
	}
	
	public void update(ToAvoid avoid) {
		this.avoidanceDate = avoid.avoidanceDate;
		this.avoided = avoid.avoided;
		this.description = avoid.description;
		this.importance = avoid.importance;
		this.name = avoid.name;
	}

	//////////////////////// öffentliche Methdeon /////////////////////////////////////////
	
	@Override
	public String toString() {
		return "ToAvoid [id=" + id + ", name=" + name + ", description="
				+ description + ", avoided=" + avoided + ", importance="
				+ importance + ", avoidanceDate=" + avoidanceDate + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ToAvoid other = (ToAvoid) obj;
		if (id != other.id)
			return false;
		return true;
	}	
}
